package com.qiaofang.applet.service.property.service;

import com.qiaofang.applet.common.base.BaseService;
import com.qiaofang.applet.service.other.domain.PropertyRules;
import com.qiaofang.applet.service.other.service.dto.MainSearchDetailDTO;
import com.qiaofang.applet.service.other.service.dto.MainSearchQueryDTO;
import com.qiaofang.applet.service.property.domain.Property;
import com.qiaofang.applet.service.property.service.dto.*;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;

import java.util.Date;
import java.util.List;

/**
 * 房源服务接口
 *
 * @author daiyuxiang
 * @Time 2020-09-30
 */
public interface PropertyService extends BaseService<Property, String> {
    Property findByPropertyUuidAndCompanyUuid(String propertyUuid, String companyUuid);

    /**
     * 根据房源唯一UUID查询新房对象
     *
     * @param propertyUniqueUuid: 房源唯一UUID
     * @return Property: 房源
     * @author daiyuxiang
     */
    Property findByPropertyUniqueUuid(String propertyUniqueUuid);


    /**
     * 分页查询二手房
     *
     * @param query:    查询条件
     * @param pageable: 分页条件
     * @return Page<Property>: 分页房源集合
     * @author daiyuxiang
     */
    Page<Property> findAllSaleByParams(SalePropertyQueryDto query, Pageable pageable);

    /**
     * 同户型或同小区租房房源
     * @param propertyUniqueUuid
     * @param query
     * @param pageable
     * @return
     */
    Page<Property> findSameSaleByParams(String propertyUniqueUuid, SalePropertyQueryDto query, Pageable pageable);

    /**
     * 首页主推房源
     * @param query
     * @param pageable
     * @return
     */
    Page<Property> findAllHotSaleByParams(SalePropertyQueryDto query, Pageable pageable);

    /**
     * 查询二手房
     *
     * @param query: 查询条件
     * @return List<Property>: 房源集合
     * @author daiyuxiang
     */
    List<Property> findAllSaleByParams(SalePropertyQueryDto query);

    /**
     * 分页查询租房
     *
     * @param query:    查询条件
     * @param pageable: 分页条件
     * @return Page<Property>: 分页房源集合
     * @author daiyuxiang
     */
    Page<Property> findAllRentByParams(RentPropertyQueryDto query, Pageable pageable);

    /**
     * 同户型或同小区租房房源
     * @param propertyUniqueUuid
     * @param query
     * @param pageable
     * @return
     */
    Page<Property> findSameRentByParams(String propertyUniqueUuid, RentPropertyQueryDto query, Pageable pageable);

    /**
     * 首页主推房源排序
     * @param query
     * @param pageable
     * @return
     */
    Page<Property> findAllHotRentByParams(RentPropertyQueryDto query, Pageable pageable);

    /**
     * 查询二手房
     *
     * @param query: 查询条件
     * @return List<Property>: 房源集合
     * @author daiyuxiang
     */
    List<Property> findAllRentByParams(RentPropertyQueryDto query);

    /**
     * 列新房源数据
     *
     * @param property
     */
    void updateProperty(Property property);

    /**
     * 获取小区房源数量
     * @return
     */
    List<EstateGroupListDto> getEstatePropertyNum();

    /**
     * 获取磐石小区房源数量（单个）
     * @return
     */
    List<EstateGroupListDto> getRockEstatePropertyNum(Long estateRockId, String corporationCode, String cityCode);

    /**
     * 批量下架二手房源
     * @param propertyRules
     * @param corporationCode
     * @param currentTimeMillis
     * @return
     */
    long batchDownProperty(PropertyRules propertyRules, String corporationCode, long currentTimeMillis);

    /**
     * 批量下架二手房源(V20)
     * @param propertyRules
     * @param corporationCode
     * @param currentTimeMillis
     * @return
     */
    long batchDownV20Property(PropertyRules propertyRules, String corporationCode, long currentTimeMillis);

    /**
     * 批量上架二手房源(V20)
     * @param corporationCode
     * @param currentTimeMillis
     * @return
     */
    long batchUpV20Property(String corporationCode, long currentTimeMillis);

    /**
     * 获取未被上下架规则处理的房源uuid集合
     * @param companyUuid
     * @param currentTimeMillis
     * @return
     */
    List<String> getUndisposedUuidList(String companyUuid, long currentTimeMillis);

    /**
     * 通过uuid集合批量处理房源上下架
     * @param uuidList
     * @param companyUuid
     * @param upDownFlag
     * @return
     */
    long batchProcessingByUuidList(List<String> uuidList, String companyUuid, String upDownFlag);

    /**
     * 根据类型查询我的房子
     * @param tradeStatus
     * @param propertyUuids
     * @return
     */
    List<Property> findAllPropertyByTradeStatus(String tradeStatus, List<String> propertyUuids);

    /**
     * 我的房子  租房
     * @param tradeStatus
     * @param propertyUuids
     * @return
     */
    List<Property> findAllRentProperty(String tradeStatus, List<String> propertyUuids);

    /**
     * 我的房子  二手房
     * @param tradeStatus
     * @param propertyUuids
     * @return
     */
    List<Property> findAllSaleProperty(String tradeStatus, List<String> propertyUuids);

    /**
     * 查询我的房子 二手房  条件少
     *
     * @param query: 查询条件
     */
    List<Property> findAllMySaleHouseByParams(SalePropertyQueryDto query);

    /**
     * 查询我的房子 租房  条件少
     *
     * @param query: 查询条件
     */
    List<Property> findAllMyRentHouseByParams(RentPropertyQueryDto query);

    /**
     * 经纪人主页：新房源展示
     * @param queryDto
     * @return
     */
    List<NewPropertySimpleDto> getNewHouseSimpleList(NewPropertyQueryDto queryDto);

    /**
     * 处理房源详情的水印图片
     *
     * @param propertyImageDtos
     * @param propertyUniqueUuid
     * @return
     */
    List<PropertyImageDto> dealPropertyImgWaterMark(List<PropertyImageDto> propertyImageDtos, String propertyUniqueUuid, String companyUuid);

    /**
     * v20小区列表搜索
     * @param mainSearchQueryDTO
     * @return
     */
    List<MainSearchDetailDTO> eatateListSearchByName(MainSearchQueryDTO mainSearchQueryDTO);
}
